package com.sf.business.appointment.util;

import com.sf.business.appointment.vo.BusAppointmentVO;
import com.sf.business.appointment.vo.BusCheckoutVO;
import com.sf.business.appointment.vo.BusServiceItemVO;
import com.sf.common.utils.DateUtils;
import io.jsonwebtoken.lang.Assert;

public class AssertArgumentsUtil {
    public static void assertArguments(BusAppointmentVO vo) {
        // 1. 验证参数
        Assert.notNull(vo.getCustomerName(),"客户姓名不能为空");
        Assert.notNull(vo.getCustomerPhone(),"客户手机号不能为空");
        Assert.notNull(vo.getAppointmentTime(),"预约时间不能为空");
        Assert.notNull(vo.getLicensePlate(),"车牌号不能为空");
        Assert.notNull(vo.getCarSeries(),"汽车类型不能为空");
        Assert.notNull(vo.getServiceType(),"服务类型不能为空");

        // 2. 验证手机号
        if(!RegexUtils.isChinaPhoneLegal(vo.getCustomerPhone())){
            throw new IllegalArgumentException("手机号格式不正确");
        }

        // 3. 验证车牌号
        if (VehiclePlateNoUtil.getVehiclePlateNo(vo.getLicensePlate()) == null) {
            throw new IllegalArgumentException("车牌号格式不正确");
        }

        // 4. 验证预约日期 (禁止在今天之前预约)
        if (vo.getAppointmentTime().before(DateUtils.getNowDate()))
            throw new IllegalArgumentException("预约日期不能在今天之前");
    }

    public static void assertArguments(BusServiceItemVO vo) {
        Assert.notNull(vo.getName(), "服务名称不能为空");
        Assert.notNull(vo.getOriginalPrice(), "服务原价不能为空");
        Assert.notNull(vo.getDiscountPrice(), "服务折扣价不能为空");
        Assert.notNull(vo.getCarPackage(), "是否套餐不能为空");
        Assert.notNull(vo.getServiceCatalog(), "服务分类不能为空");
        Assert.notNull(vo.getInfo(), "备注信息不能为空");

        if (vo.getOriginalPrice().compareTo(vo.getDiscountPrice()) < 0) {
            throw new IllegalArgumentException("服务原价不能小于服务折扣价");
        }
    }

    public static void assertArguments(BusCheckoutVO vo) {
        // 1. 验证参数
        Assert.notNull(vo.getCustomerName(),"客户姓名不能为空");
        Assert.notNull(vo.getCustomerPhone(),"客户手机号不能为空");
        Assert.notNull(vo.getLicensePlate(),"车牌号不能为空");
        Assert.notNull(vo.getCarSeries(),"汽车类型不能为空");
        Assert.notNull(vo.getServiceType(),"服务类型不能为空");

        // 2. 验证手机号
        if(!RegexUtils.isChinaPhoneLegal(vo.getCustomerPhone())){
            throw new IllegalArgumentException("手机号格式不正确");
        }

        // 3. 验证车牌号
        if (VehiclePlateNoUtil.getVehiclePlateNo(vo.getLicensePlate()) == null) {
            throw new IllegalArgumentException("车牌号格式不正确");
        }

    }

}
